#include<bits/stdc++.h> 
using namespace std;
//	一棵AVL树是指一棵自平衡的二分搜索树。在AVL树中，任何结点的两棵子树的高度最多相差1，否
//	则就需要重新平衡。
//1.每个输入包括一个测试用例，对于每个测试用例，第一行包括一个正整数N≤20，表示结点总数
//	然后N个不重复的整数值。
//2.输出AVL树最终的根
//3.二叉树，树的旋转，树的层次计算
//这道题考察的是对各种需要平衡的情况的分类以及具体树枝旋转的操作。可以分为LL~RR四种情况
//LL指的是左边高度大于右边，且是因为当前根的左结点在插入左结点导致的
//LR指的是左边高度大于右边，且是因为当前根的左结点在插入右结点导致的
//以此类推。所以我们需要做就是把这两组对称的操作复现出来。 
struct Node{
	int key;
	Node* left = NULL;
	Node* right = NULL;
};
//无论哪种情况，只要记住，取三个需要转的点，排序后中间值的那个就是根节点 
Node* LL(Node* root){	//如果是LL的情况，则取左结点为新的根，具体为什么这么做，画个图就懂了 
	Node* t = root->left;
	root->left = t->right;
	t->right = root;
	root = t;
	return root;
}
Node* LR(Node* root){	//如果是LR的情况，则取左结点的右结点为新的根 
	Node* t = root->left->right;
	root->left->right = t->left;
	t->left = root->left;
	root->left = t->right;
	t->right = root; 
	root = t;
	return root;
}
Node* RL(Node* root){
	Node* t = root->right->left;
	root->right->left = t->right;
	t->right = root->right;
	root->right = t->left;
	t->left = root; 
	root = t;
	return root;
}
Node* RR(Node* root){
	Node* t = root->right;
	root->right = t->left;
	t->left = root;
	root = t;
	return root;
}
int getDepth(Node* root){	//递归获取层次数 
	if(root->left==NULL&&root->right==NULL) return 1;
	int l = 1, r = 1;
	if(root->left!=NULL) l = getDepth(root->left) + 1;
	if(root->right!=NULL) r = getDepth(root->right) + 1;
	return max(l, r);
}
Node* rotate(Node* root, Node* node){	//旋转的判断与操作函数 
	int l,r;
	if(root->left==NULL) l = 0;
	else l = getDepth(root->left);
	if(root->right==NULL) r = 0;
	else r = getDepth(root->right);
	if(r-l==2){	//进入旋转的判定条件就是左边比右边高2或者右边比左边高2 
		if(node->key>root->right->key) return RR(root);	//根据根节点与插入结点的大小比较，可以判断属于上述四种情况的哪一种 
		else return RL(root);
	}
	else if(l-r==2){
		if(node->key>root->left->key) return LR(root);
		else return LL(root);
	}
	return root;
}
Node* insert(Node* root, Node* node){	//递归插入函数，且只要插入完毕就进行旋转判断，也就是说在插入递归往回退的时候，从下往上一边返回一边判断旋转 
	if(node->key<root->key){
		if(root->left==NULL) root->left = node;
		else root->left = insert(root->left, node);
		root = rotate(root, node);
	}
	else{
		if(root->right==NULL) root->right = node;
		else root->right = insert(root->right, node);
		root = rotate(root, node);
	}
	return root;
}
int main(){
	int N;
	cin>>N;
	Node* root = new Node;
	cin>>root->key;
	for(int i = 1;i<N;i++){	//读入结点，插入结点 
		Node* node = new Node;
		cin>>node->key;
		root = insert(root, node);
	}
	cout<<root->key<<endl;	//输出根 
	return 0;
}